home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / telecomdemo / control.c next >
C/C++ Source or Header  |  1997-05-08  |  8KB  |  263 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)control.c    V1.7    3/17/95";
  3. #endif
  4.  
  5. /*
  6.  |    File name: control.c
  7.  |========================================================================
  8.  |
  9.  |    Copyright (c) 1990 -- V.I. Corporation
  10.  |
  11.  |========================================================================
  12.  */
  13.  
  14. #include "simulate.h"
  15. #include "tlc_fundecl.h"
  16.  
  17. /*
  18.  *   Constant definitions -- number of sliders to be defined and the
  19.  *     input mask to be used in the window.
  20.  */
  21. #define NUM_SLIDERS    3
  22. #define NORMAL_MASK    ( (ULONG) V_BUTTONPRESS | V_BUTTONRELEASE | \
  23.                                   V_LEAVENOTIFY | V_EXPOSE | V_RESIZE | \
  24.                                   V_MOTIONNOTIFY | V_WINDOW_QUIT )
  25.  
  26. /*
  27.  *   Local variable and function declarations.
  28.  */
  29. LOCAL VIEW ControlView;
  30. LOCAL DRAWPORT ControlDrawport;
  31. LOCAL OBJECT IterNumber;
  32. LOCAL OBJECT Slider[NUM_SLIDERS];
  33.  
  34. #define DEF_COLORTAB    (ADDRESS)NULL
  35.  
  36. /***************** Begin Function Declarations *************/
  37. LOCAL  void LoadControlView V_P_((void));
  38. LOCAL  void GetInputInfo V_P_((VIEW view));
  39. LOCAL  void GetControlVariables V_P_((VIEW view));
  40. LOCAL  BOOLPARAM PressInSlider V_P_((OBJECT location));
  41. LOCAL  void CheckForActiveSlider V_P_((OBJECT location));
  42. /***************** End Function Declarations *************/
  43.  
  44. /*
  45.  *   CreateControlScreen -- create the simulation control window and
  46.  *     load the view to be displayed.
  47.  */
  48. void 
  49. CreateControlScreen (devname)
  50.      char *devname;
  51. {
  52.   ControlScreen = TscOpenSet (devname, DEF_COLORTAB,
  53. #ifdef WINNT
  54.                   V_WIN32_ICON_NAME,       "teleicon",
  55.                   V_WINDOW_WIDTH,          230,
  56.                   V_WINDOW_HEIGHT,         230,
  57. #ifdef DOUBLE_BUFFER
  58.                   V_WIN32_DOUBLE_BUFFER,   YES,
  59. #endif /* DOUBLE_BUFFER */
  60. #else  /* Not WINNT */
  61.                   V_WINDOW_WIDTH,          400,
  62.                   V_WINDOW_HEIGHT,         400,
  63.                   V_X_EXPOSURE_BLOCK,      YES,
  64. #endif /* WINNT */
  65.                               V_WINDOW_NAME, "Simulation Control",
  66.                               V_WINDOW_X, 10,
  67.                               V_WINDOW_Y, 10,
  68.                               V_INITIAL_CURSOR,
  69.                               V_END_OF_LIST);
  70.  
  71.   LoadControlView ();
  72.   (VOID) TdpDraw (ControlDrawport);
  73.   (VOID) VOscWinEventMask ((ULONG) NORMAL_MASK, 0L);
  74. }
  75.  
  76.  
  77. /*
  78.  *   DestroyControlScreen -- destroy the view and drawport and close the
  79.  *     screen.
  80.  */
  81. void DestroyControlScreen 
  82. V_P_ ((void))
  83. {
  84.   (VOID) TdpDestroy (ControlDrawport);
  85.   (VOID) TviDestroy (ControlView);
  86.   (VOID) TscClose (ControlScreen);
  87. }
  88.  
  89.  
  90. /*
  91.  *   UpdateControlScreen -- update the iteration number value displayed
  92.  *     in a vector text object.
  93.  */
  94. void UpdateControlScreen 
  95. V_P_ ((void))
  96. {
  97.   (VOID) TdpEraseObject (ControlDrawport, IterNumber);
  98.   SetNumberString (IterNumber, (INT) SimParams.iter_number);
  99.   (VOID) TdpDrawObject (ControlDrawport, IterNumber);
  100. }
  101.  
  102.  
  103. /*
  104.  *   HandleControlInput -- handle input in the control window by determining
  105.  *     the type of the event and performing the correct action.
  106.  */
  107. void 
  108. HandleControlInput (location)
  109.      OBJECT location;
  110. {
  111.   switch (VOloType (location))
  112.     {
  113.     case V_EXPOSE:
  114.       (VOID) TscRedraw (ControlScreen, (RECTANGLE *) NULL);
  115.       break;
  116.     case V_RESIZE:
  117.       (VOID) TscReset (ControlScreen);
  118.       break;
  119.     case V_WINDOW_QUIT:
  120.       *Control.quit_flag = 1;
  121.       break;
  122.     case V_BUTTONPRESS:
  123.       if (PressInSlider (location))
  124.         (VOID) VOscWinEventMask ((ULONG) V_ADD_TO_MASK | V_MOTIONNOTIFY, 0L);
  125.       else
  126.         (VOID) VUerHandleLocEvent (location);
  127.       break;
  128.     case V_BUTTONRELEASE:
  129.     case V_LEAVENOTIFY:
  130.       CheckForActiveSlider (location);
  131.       break;
  132.     default:
  133.       (VOID) VUerHandleLocEvent (location);
  134.       break;
  135.     }
  136. }
  137.  
  138.  
  139. /*
  140.  *   LoadControlView -- load the view, get the objects and the variables,
  141.  *     and create a drawport to be used.
  142.  */
  143. LOCAL void LoadControlView 
  144. V_P_ ((void))
  145. {
  146.   ControlView = TviLoad (ControlViewName);
  147.  
  148.   EXIT_IF_INVALID (ControlView,
  149.                    "\nAborted: Control View can't be loaded\n");
  150.  
  151.   GetInputInfo (ControlView);
  152.   GetControlVariables (ControlView);
  153.   IterNumber = TdrGetNamedObject (TviGetDrawing (ControlView), "IterNumber");
  154.   ControlDrawport = TdpCreateStretch (ControlScreen, ControlView,
  155.                                       &FullScreen, &WholeDrawing);
  156. }
  157.  
  158.  
  159. /*
  160.  *   GetInputInfo -- get the sliders from the drawing and change their
  161.  *     state to be inactive.
  162.  */
  163. LOCAL void 
  164. GetInputInfo (view)
  165.      VIEW view;
  166. {
  167.   OBJECT drawing;
  168.   INT i;
  169.  
  170.   drawing = TviGetDrawing (view);
  171.   Slider[0] = TdrGetNamedObject (drawing, "DelayTimeSlider");
  172.   Slider[1] = TdrGetNamedObject (drawing, "ErrorFactorSlider");
  173.   Slider[2] = TdrGetNamedObject (drawing, "AutoFixSlider");
  174.   for (i = 0; i < NUM_SLIDERS; i++)
  175.     (VOID) VOinState (Slider[i], INACTIVE);
  176. }
  177.  
  178.  
  179. /*
  180.  *   GetControlVariables -- get the variables controlled by the input
  181.  *     objects in the view, save pointers to the buffers, and set the
  182.  *     initial values.
  183.  */
  184. LOCAL void 
  185. GetControlVariables (view)
  186.      VIEW view;
  187. {
  188.   DATASOURCE ds;
  189.   DSVAR dsvar;
  190.  
  191.   ds = TdlGetNamedDataSource (TviGetDataSourceList (view), "SimControlVars");
  192.   dsvar = TdsGetNamedDsVar (ds, "DelayTime");
  193.   Control.delay_time = (FLOAT *) TdsvGetBuffer (dsvar);
  194.   dsvar = TdsGetNamedDsVar (ds, "ErrorFactor");
  195.   Control.error_factor = (FLOAT *) TdsvGetBuffer (dsvar);
  196.   dsvar = TdsGetNamedDsVar (ds, "AutoFixDelay");
  197.   Control.autofix_delay = (FLOAT *) TdsvGetBuffer (dsvar);
  198.  
  199.   dsvar = TdsGetNamedDsVar (ds, "ForceErrorFlag");
  200.   Control.force_error_flag = (SHORT *) TdsvGetBuffer (dsvar);
  201.   dsvar = TdsGetNamedDsVar (ds, "RestartFlag");
  202.   Control.restart_flag = (SHORT *) TdsvGetBuffer (dsvar);
  203.   dsvar = TdsGetNamedDsVar (ds, "PauseFlag");
  204.   Control.pause_flag = (SHORT *) TdsvGetBuffer (dsvar);
  205.   dsvar = TdsGetNamedDsVar (ds, "QuitFlag");
  206.   Control.quit_flag = (SHORT *) TdsvGetBuffer (dsvar);
  207.  
  208.   *Control.delay_time = 2.0;
  209.   *Control.error_factor = 50.0;
  210.   *Control.autofix_delay = 60.0;
  211.   *Control.force_error_flag = 0;
  212.   *Control.restart_flag = 0;
  213.   *Control.pause_flag = 0;
  214.   *Control.quit_flag = 0;
  215. }
  216.  
  217.  
  218. /*
  219.  *   PressInSlider -- a button press has been made in a slider.  Activate
  220.  *     the correct slider so that the slider bar can be dragged and allow
  221.  *     the event handler to process the first pick.
  222.  */
  223. LOCAL BOOLPARAM 
  224. PressInSlider (location)
  225.      OBJECT location;
  226. {
  227.   OBJECT object;
  228.   INT i;
  229.  
  230.   if ((object = TloGetSelectedObject (location)))
  231.     for (i = 0; i < NUM_SLIDERS; i++)
  232.       if (object == Slider[i])
  233.         {
  234.           (VOID) VOinState (Slider[i], ACTIVE);
  235.           (VOID) VUerHandleLocEvent (location);
  236.           return YES;
  237.         }
  238.   return NO;
  239. }
  240.  
  241.  
  242. /*
  243.  *   CheckForActiveSlider -- a button has been released.  Check to see if
  244.  *     any of the sliders are active, and if so, let the event handler deal
  245.  *     with this last event and then deactivate the slider.  Return the input
  246.  *     mask to its original state.
  247.  */
  248. LOCAL void 
  249. CheckForActiveSlider (location)
  250.      OBJECT location;
  251. {
  252.   INT i;
  253.  
  254.   for (i = 0; i < NUM_SLIDERS; i++)
  255.     if (VOinState (Slider[i], (INT)NULL) == ACTIVE)
  256.       {
  257.         (VOID) VUerHandleLocEvent (location);
  258.         (VOID) VOinState (Slider[i], INACTIVE);
  259.         (VOID) VOscWinEventMask ((ULONG) NORMAL_MASK, 0L);
  260.         return;
  261.       }
  262. }
  263.